[小ワザ] AWS CloudShellを利用してSES経由でテスト用メールを送ってみた
こんにちは、コンサル部@大阪オフィスのTodaです。
SESの構築をおこなった後にテストメールを送信して設定セット(Configuration Sets)が正常に動いているか確認をする場合、SES標準のテスト送信が入力面倒だな、と思うようになってきました。
今回、CloudShellを使ってテスト送信を試してみました。
やりたいこと
- CloudShellを利用してSES経由でメール送信をする。
やってみる
AWS CloudShellを起動する
AWSマネージメントコンソールにログインをおこない、上部のCloudShellボタンをクリックして起動します。
opensslのインストール
CloudShellにはopensslが導入されていないため yumコマンドを利用してインストールします。
sudo yum -y install openssl
SMTP認証文字列の作成
SESのSMTP認証に利用する文字列は[ユーザ名 \0 ユーザ名 \0 パスワード]の文字をbase64エンコードした物になります。 下記コマンドを利用して生成をおこないます。
user=[ユーザ名] password=[パスワード] perl -MMIME::Base64 -e 'print encode_base64("'$user'\0'$user'\0'$password'");' | sed ':a;N;$!ba;s/\n//g' # 出力結果 (例) QUtJQVJCMzJYWVptJXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ※以下省略
※CloudShellに複数行の文字列をコピー&ペーストするとSafe Paste for multiline textの警告が表示されます。 [Paste]ボタンをクリックする事でペーストが可能です。
メールを送信
SMTP認証文字列が準備できれば、下記文字列を複数行入力することでSES経由でメール送信が可能になります。 サンプルコード内の[XX]文字列は置き換えて実行ください。
・置き換え文字列 (例)
[送信元メールアドレス]:info@example.com
[送信元ドメイン]:example.com
[送信先メールアドレス]:receive@example.org
[SMTP認証文字列]:上記で生成した文字列
[SMTPサーバ名]:email-smtp.ap-northeast-1.amazonaws.com
[SMTPサーバポート]:587
{ sleep 0.3; echo 'HELO [送信元ドメイン]'; sleep 0.3; echo 'AUTH PLAIN [SMTP認証文字列]'; sleep 0.3; echo 'MAIL FROM:<[送信元メールアドレス]>'; sleep 0.3; echo 'rcpt TO:<[送信先メールアドレス]>'; sleep 0.3; echo 'DATA'; sleep 0.3; echo -e 'To:[送信先メールアドレス]\n\n' echo -e 'このメールはテスト送信メールです。\n' echo '.'; sleep 0.3; echo 'QUIT'; } | openssl s_client -starttls smtp -crlf -connect [SMTPサーバ名]:[SMTPサーバポート]
実際の入力例
{ sleep 0.3; echo 'HELO example.com'; sleep 0.3; echo 'AUTH PLAIN QUtJQVJCMzJYWVptJXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; sleep 0.3; echo 'MAIL FROM:<info@example.com>'; sleep 0.3; echo 'rcpt TO:<receive@example.org>'; sleep 0.3; echo 'DATA'; sleep 0.3; echo -e 'To:receive@example.org\n\n' echo -e 'このメールはテスト送信メールです。\n' echo '.'; sleep 0.3; echo 'QUIT'; } | openssl s_client -starttls smtp -crlf -connect email-smtp.ap-northeast-1.amazonaws.com:587 # 出力結果 CONNECTED(00000003) depth=4 C = US, O = "XXXXXXXXXXX", OU = XXXXXXXXXXX verify return:1 depth=3 C = US, ST = XXXXXXXXXXX, L = XXXXXXXXXXX, O = "XXXXXXXXXXX", CN = XXXXXXXXXXX - G2 verify return:1 depth=2 C = US, O = XXXXX, CN = XXXXX Root CA 1 verify return:1 depth=1 C = US, O = XXXXX, OU = Server CA 1B, CN = XXXXX verify return:1 depth=0 CN = email-smtp.ap-northeast-1.amazonaws.com verify return:1 --- Certificate chain 0 s:/CN=email-smtp.ap-northeast-1.amazonaws.com i:/C=US/O=XXXXX/OU=Server CA 1B/CN=XXXXX 1 s:/C=US/O=XXXXX/OU=Server CA 1B/CN=XXXXX i:/C=US/O=XXXXX/CN=XXXXX Root CA 1 2 s:/C=US/O=XXXXX/CN=XXXXX Root CA 1 i:/C=US/ST=XXXXX/L=XXXXX/O=XXXXXXXXXXX, Inc./CN=XXXXXXXXXXX - G2 3 s:/C=US/ST=XXXXX/L=XXXXX/O=XXXXXXXXXXX, Inc./CN=XXXXXXXXXXX - G2 i:/C=US/O=XXXXX, XXXXX/OU=XXXXXXXXXXX --- Server certificate -----BEGIN CERTIFICATE----- ***************** ******省略******* ***************** -----END CERTIFICATE----- subject=/CN=email-smtp.ap-northeast-1.amazonaws.com issuer=/C=US/O=XXXXX/OU=Server CA 1B/CN=XXXXX --- No client certificate CA names sent Peer signing digest: SHA512 Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 000 bytes and written 000 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-XXXXXXXXXXXX Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-XXXXXXXXXXXX Session-ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Session-ID-ctx: Master-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1612257610 Timeout : 300 (sec) Verify return code: 0 (ok) --- 250 Ok 250 email-smtp.amazonaws.com 235 Authentication successful. 250 Ok 250 Ok 354 End data with <CR><LF>.<CR><LF> 250 Ok 000000-000000000-0000000-0000000 DONE
メール受信の確認
最終行が 250 Ok となっている場合、送信は完了しています。
メールが到着しているかをご確認ください。
さいごに
今回はCloudShellを利用してSESのメール送信テストをしてみました。
少しでも手間を減らせたら良いなと考えております。